package persistencias;

import classes.Funcionario;
//import classes.Pessoa;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;


public class PFuncionario {
    private List<Funcionario> funcionarios = new ArrayList<Funcionario>();
    int i;
    int j;
    
    public Funcionario consultarNome(Funcionario funcionario){
        for(i = 0; i< funcionarios.size(); i++){
            if (funcionarios.get(i).getNome().equalsIgnoreCase(funcionario.getNome())) {
                System.out.println("Funcionario já cadastrado");
                return funcionarios.get(i);
            }
        }
        return null;
    }
    
    public Funcionario consultarCpf(Funcionario funcionario){
        for(i = 0; i< funcionarios.size(); i++){
            if (funcionarios.get(i).getCpf() == funcionario.getCpf()) {
                System.out.println("Funcionário já cadastrado");
                return funcionarios.get(i);
            }
        }
        return null;
    }
    
    public List<String> listarPorCargo(String cargo) {
        List<String> s = null;
        for(i = 0; i< funcionarios.size(); i++){
            if (funcionarios.get(i).getCargo().equalsIgnoreCase(cargo)) {
                s.add(funcionarios.get(i).getNome());
            }
        }
        return s;
    }
    
        public int encontrar(Funcionario funcionario){
            i = -1;
            i = this.funcionarios.indexOf(funcionario);
            return i;
    }
    
    public void adicionar(Funcionario funcionario) {
        i = encontrar(funcionario);
        if ( i == -1){
            this.funcionarios.add(funcionario);
        }
        else System.out.println("Funcionário já cadastrado");
    }
    
    public void excluir(Funcionario funcionario) {
        j = encontrar(funcionario);
        if (j != -1) {
                    this.funcionarios.remove(j);
        }
    }

    public List<Funcionario> getFuncionarios() {
        return funcionarios;
    }

        //Manipulação de Arquivos
    
    public void salvarFuncionariosArquivo(List<Funcionario> funcionarios) throws IOException {
                FileWriter writer = new FileWriter(new File("funcionarios.txt"));
                PrintWriter saida = new PrintWriter(writer);
                
                for( i=0; i < funcionarios.size(); i++) {
                        saida.println(funcionarios.get(i).getNome() + "," 
                        + funcionarios.get(i).getCpf() + ","
                        + funcionarios.get(i).getEndereco() + "," 
                        + funcionarios.get(i).getTelefone() + ","
                        + funcionarios.get(i).getCargo());
                }
                writer.close();
                saida.close();
        }
    
    public void carregarFuncionariosArquivo(List<Funcionario> funcionarios) throws IOException {
                File arquivo = new File("funcionarios.txt");
                
                if(!arquivo.exists()) arquivo.createNewFile();
                else {
               
                        FileReader leitura = new FileReader("funcionarios.txt");
                        BufferedReader leitor = new BufferedReader(leitura);
                                
                        String linha = null;
                        String [] vetor = null;
                
                        while((linha = leitor.readLine()) != null) {
                                vetor = linha.split(",");
                        
                                String nome = vetor[0];
                                long cpf = Long.parseLong(vetor[1]);
                                String endereco = vetor[2];
                                long telefone = Long.parseLong(vetor[3]); 
                                String cargo = vetor[4];
                        
                                Funcionario novoFuncionario = new Funcionario(nome, cpf, endereco, telefone, cargo);
                
                                adicionar(novoFuncionario);
                        }
                        leitor.close();
                        leitura.close();
                }
        }
    
}
